package com.ctshk.rpc.system.service;


import java.math.BigDecimal;
import java.util.List;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.rpc.system.dto.MainDataCurrencyListDTO;
import com.ctshk.rpc.system.dto.MainDataCurrencyQueryDTO;
import com.ctshk.rpc.system.dto.OrderCollectionSumDTO;
import com.ctshk.rpc.system.req.*;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-01-29
 */
public interface IMainDataCurrencyService  {

    /**
     * 新增币种
     */
    Result add(MainDataCurrencyAddReq req);

    /**
     * 编辑币种
     */
    Result update(MainDataCurrencyUpdateReq req);

    /**
     * 编辑币种状态
     */
    Result updateStatus(MainDataCurrencyUpdateStatusReq req);

    /**
     * 查询币种列表
     */
    PageResponse<MainDataCurrencyListDTO> list(MainDataCurrencyListReq req);

    /**
     * 查询币根据编码查询
     */
    MainDataCurrencyListDTO getCurrencyByCode(String code);


    /**
     * 查询币种列表
     */
    Result<MainDataCurrencyQueryDTO> query(MainDataCurrencyUpdateStatusReq req);

    /**
     * 根據ID集合查询币种列表
     */
    List<MainDataCurrencyQueryDTO> queryList(List<Long> req);


    /**
     * author gzl-wansi001
     * 获取币种的兑换率
     * @param currencyCode          币种编码
     * @param rateExchangeType      汇率类型 1. 计划兑换率 2.门市兑换率 3.crm兑换率 4.财务兑换率
     * @return                      兑换率
     */
    BigDecimal getExchangeRate(String currencyCode,String rateExchangeType);

    /**
     * author gzl-wansi001
     * 获取币种的兑换率
     * @param currencyCode          币种编码
     * @param rateExchangeType      汇率类型 1. 计划兑换率 2.门市兑换率 3.crm兑换率 4.财务兑换率
     * @return                      兑换率
     */
    MainDataCurrencyQueryDTO getExchangeCurrencyEntity(String currencyCode,String rateExchangeType);

    /**
     * 根据币种兑换港币金额
     * @param currencyId
     * @param amount
     * @return
     */
    BigDecimal getHkdAmount(Long currencyId,BigDecimal amount);

    /**
     * 订单收款本位币金额统计
     * @param list
     * @return
     */
    OrderCollectionSumDTO orderCollectionSum(List<OrderCollectionSumReq> list);

    /**
     * 根据币种和汇率类型兑换港币金额
     * @param currencyId
     * @param amount
     * @return
     */
    BigDecimal getHkdAmountByType(Long currencyId, String rateExchangeType, BigDecimal amount);

    /**
     * 取得某币种转港币的门市兑换率
     * @param currencyId 币种ID
     * @return 兑换率
     */
    BigDecimal getMarketRateById(Long currencyId);
    
    /**
     * 取得某币种转港币的计划兑换率
     * @param currencyId 币种ID
     * @return 兑换率
     */
    BigDecimal getPlanneRateById(Long currencyId);
}
